package com.tao.picture.ui.girl.fragment

import androidx.fragment.app.viewModels
import com.elvishew.xlog.XLog
import com.tao.BaseFragment
import com.tao.net.addObserve
import com.tao.picture.R
import com.tao.picture.databinding.FragmentGirlsBinding
import com.tao.picture.ui.girl.activity.DetailActivity
import com.tao.picture.ui.girl.adapter.GirlListAdapter
import com.tao.picture.ui.girl.data.entity.Girl
import com.tao.picture.ui.girl.viewmodel.GirlsViewModel
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class GirlsFragment : BaseFragment<FragmentGirlsBinding, GirlsViewModel>() {

    override val viewModel: GirlsViewModel by viewModels()

    private lateinit var adapter: GirlListAdapter

    override val binding: FragmentGirlsBinding by lazy {
        FragmentGirlsBinding.inflate(layoutInflater)
    }

    override fun initObservable() {
        super.initObservable()
        /**
         * 添加监听
         */
        addObserve(viewModel.girls) {
            // drop丢弃前n条数据 List的drop函数可以丢弃数据
//            viewModel.saveImage(it.data.get(0)) // 可以测试db的保存功能
            // 显示数据
            adapter.addData(it)
        }

        // 监听下载
        addObserve(viewModel.img, {
            XLog.e(it)
        }) {
            XLog.e(it)
        }
    }

    override fun initData() {
        super.initData()
        // 初始化适配器
        adapter = GirlListAdapter()
        // 监听点击事件
        adapter.setOnItemClickListener { adapter, view, position ->
            val item = adapter.getItem(position) as Girl
            // 跳转详情页
            context?.run {
                DetailActivity.launch(this, item.url)
            }
        }
        // 设置适配器
        binding.recyclerView.adapter = adapter
        // 请求数据
        viewModel.getImage()
        // 下载
//        viewModel.download()
//        lifecycleScope.launch {
//            delay(5000)
//            viewModel.getImage()
//        }
        // 一些测试
//        lifecycleScope.launch {
//            withContext(Dispatchers.IO) {
//            }
//            repeat(1000) {
//                XLog.e("计时：$it")
//                delay(1000)
//            }
//        }
    }

}